package jm.data.structure.map;

/**
 * @Description map 接口
 * @date 2022/4/24 8:52
 */
public interface Map<K,V> {

    /**
     * 获取键值对个数
     * @return size
     */
    int size();

    /**
     * 判断是否为空
     * @return
     */
    boolean isEmpty();

    /**
     * 清空集合
     */
    void clear();

    /**
     * 添加元素
     * @param k
     * @param v
     * @return
     */
    V put(K k, V v);

    /**
     * 根据 k 获取元素
     * @param k
     * @return
     */
    V get(K k);

    /**
     * 删除元素
     * @param k
     */
    V remove(K k);

    /**
     * 判断是否包含某个key
     * @param k
     * @return
     */
    boolean containsKey(K k);

    /**
     * 判断是否包含某个value
     * @param v
     * @return
     */
    boolean containsValue(V v);

    /**
     * 遍历接口
     * @param visitor
     */
    void traversal(Visitor<K,V> visitor);

    /**
     * 遍历接口抽象类
     * @param <K,V>
     */
    abstract class Visitor<K,V>{
        boolean stoop;
        public abstract boolean visit(K k, V v);
    }
}
